package ckw.gui.wizards;

import java.io.IOException;
import java.util.ArrayList;

import org.eclipse.jface.wizard.Wizard;

import ckw.database.Configuration;
import ckw.database.DatabaseManager;
import ckw.database.OKW;
import ckw.gui.MainWindowC;
import core.modules.configuration.ConfigurationManager;
import core.modules.configuration.Crypto;
import core.util.Converter;

// Wizard odpowiedzialny za tworzenie konfiguracji dla wybranych OKW
public class WzdConfiguration extends Wizard {
	private ArrayList<OKW> okwList;

	public ArrayList<OKW> getOkwList() {
		return okwList;
	}

	WzdConfigurationPg1 one; // strona pierwsza, z
														// lista OKW
	WzdConfigurationPg2 two; // strona druga, z
													// formularzami konfiguracji
	WzdConfigurationPg3 three;

	public WzdConfiguration(ArrayList<OKW> okwList) {
		super();
		setWindowTitle("Generuj konfiguracje");
		setNeedsProgressMonitor(true);

		this.okwList = okwList;
	}

	@Override
	public void addPages() {
		one = new WzdConfigurationPg1();
		two = new WzdConfigurationPg2();
		three = new WzdConfigurationPg3();

		addPage(one);
		addPage(two);
		addPage(three);
	}

	@Override
	public boolean performFinish() {
		for (ConfigurationInputGUI ciGUI : two.getSelectedOKWsGUI()) {
			OKW okw = ciGUI.getOkw();

			// Uzupelniamy dane konfiguracyjne na podstawie wprowadzonych do
			// wizarda danych
			Configuration configuration = new Configuration();
			configuration.setIdentificationField(okw.getIdentificationField());
			configuration.setCipherKey(ciGUI.getCipherKeyText().getText());
			configuration.setIp(ciGUI.getIpText().getText());
			configuration.setPassword(ciGUI.getPasswordText().getText());
			// TODO: na razie nie jest tutaj konwertowane do jakiejs MD5ki,
			// ZMIENIC KONIECZNIE

			String ckwIP = three.getServerIPAddress(); // TODO: podmienic na
										// http://www.roseindia.net/java/java-get-example/get-own-ip.shtml
			// Klasa bazowa konfiguracji, potrzebna przy zapisie/odczycie
			// konfiguracji do/z XML'a
			core.modules.database.SuperConfiguration coreconf = new core.modules.database.SuperConfiguration(
					okw.getIdentificationField(), ckwIP, ciGUI
							.getCipherKeyText().getText(), ciGUI
							.getPasswordText().getText());

			// Konwersja configa do XMLa
			String xmlString = Converter.objectToXML(coreconf);
			// Dodanie pierwszej linijki, potrzebnej przy enkrypcji
			xmlString = Crypto.getInstance().addVerificationLine(xmlString);
			// TODO: encryption
			xmlString = Crypto.getInstance().encrypt(xmlString,
					ciGUI.getPasswordText().getText()); // pobierane z pola,
														// zeby szyfrowac
														// haslem, a nie md5
			
			try {
				ConfigurationManager.getInstance().saveConfigToFile(
						coreconf.getIdentificationField(),
						coreconf.getIdentificationField(), xmlString);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			// Zapis konfiguracji do bazy danych
			DatabaseManager db = DatabaseManager.getInstance();
			db.save(configuration);
			db.addConfigurationToOKW(configuration, okw);


		}
		MainWindowC.cm.aktualizacjaKomisji();
		MainWindowC.aktualizujKomisje();
		return true;
	}
}
